package done.easy_201_300;

import com.study.common.TreeNode;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * 257. Binary Tree Paths
 * <p>
 * 给定一个二叉树，返回所有从根节点到叶子节点的路径。
 * 说明: 叶子节点是指没有子节点的节点。
 * 示例:
 * 输入:
 * <p>
 * 1
 * /   \
 * 2     3
 * \
 * 5
 * <p>
 * 输出: ["1 -> 2 ->5", "1 -> 3"]
 * 解释: 所有根节点到叶子节点的路径为: 1 -> 2 -> 5, 1 -> 3
 */
@Slf4j
public class BinaryTreePaths {

    private List<String> result = new ArrayList<>();

    @SuppressWarnings("all")
    public List<String> binaryTreePaths(TreeNode root) {
        // 190326 first
        // 190331 second 用了两次
        return result;
    }

    @Test
    public void test() {
        TreeNode root = new TreeNode(1,
                new TreeNode(2,
                        null, new TreeNode(5,
                        1, new TreeNode(3,
                        1, 7))), 3);
        log.info("result:{}", binaryTreePaths(root));
    }
}
































/*
public List<String> binaryTreePaths(TreeNode root) {
    if(root==null)
        return result;

    // 发起递归操作
    step(root,"");

    return result;
}

private TreeNode step(TreeNode root, String path) {
    // NO.1 每次进来先把上一层的结果拼上
    if (path.equals("")) {
        path = path + root.val;
    } else {
        path = path + "->" + root.val;
    }

    // NO.2 所有左边的可能结果
    if(root.left!=null)
        step(root.left, path);

    // NO.3 所有右边的可能结果
    if(root.right!=null)
        step(root.right, path);

    // NO.4 只有遍历到最后的结果, 才需要加到最终结果上
    if (root.left==null && root.right==null)
        result.add(path);

    return root;
}
*/
